package com.cskaoyan.javase.oop1._14block._2building._3usecase;

/**
 * 如果成员变量的赋值需要一个很复杂的算法和逻辑
 * 那就可以考虑把这些代码写入构造代码块中
 * 但这种场景不多见
 *
 * 在这种场景下,可以把构造代码块理解成一个在new对象过程中
 * 自动被调用,自动执行的成员方法
 *
 * 构造代码块中很类似于成员方法的方法体
 * 可以使用this关键字,指向当前对象
 *
 * 当然构造代码块中也是可以访问静态成员的,也可以给静态成员变量赋值
 * 但是要注意这种赋值,依赖于new对象,因为构造代码块随着构造器的执行而执行
 * 如果希望类加载过程中,找一个代码块给静态成员变量赋值,就是静态代码块
 *
 * @since 15:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(A.staticNum);
        new A();
        System.out.println(A.staticNum);
    }
}

class A {
    static int staticNum;

    int num;

    {
        System.out.println(this);
        this.num = 18;
        test();
        staticNum = 100;
        testStatic();
    }

    public void test() {
    }

    public static void testStatic() {
    }
}
